package com.weimob.cloud.api.shop.rsp;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.List;

/**
 * 微盟查询在售商品详情响应
 */
@Getter
@Setter
public class WeimobShopGetGoodsDetailRsp implements Serializable {

    @JsonProperty("isMultiSku")
    private Boolean isMultiSku;

    @JsonProperty("soldType")
    private Integer soldType;

    @JsonProperty("limitSwitch")
    private Boolean limitSwitch;

    @JsonProperty("skuList")
    private List<SkuListDTO> skuList;

    @JsonProperty("goodsTemplateId")
    private Long goodsTemplateId;

    @JsonProperty("goodsId")
    private Long goodsId;

    @JsonProperty("cycleDeliveryNum")
    private Integer cycleDeliveryNum;

    @JsonProperty("pointDeductRule")
    private PointDeductRuleDTO pointDeductRule;

    @JsonProperty("isOnline")
    private Boolean isOnline;

    @JsonProperty("title")
    private String title;

    @JsonProperty("isCanSell")
    private Boolean isCanSell;

    @JsonProperty("goodsRightsList")
    private List<GoodsRightsListDTO> goodsRightsList;

    @JsonProperty("goodsClassifyList")
    private List<GoodsClassifyListDTO> goodsClassifyList;

    @JsonProperty("sizeTableInfo")
    private SizeTableInfoDTO sizeTableInfo;

    @JsonProperty("itemClassify")
    private ItemClassifyDTO itemClassify;

    @JsonProperty("tagInfo")
    private TagInfoDTO tagInfo;

    @JsonProperty("vid")
    private Long vid;

    @JsonProperty("goodsVideoImageUrl")
    private String goodsVideoImageUrl;

    @JsonProperty("subGoodsType")
    private Integer subGoodsType;

    @JsonProperty("subTitle")
    private String subTitle;

    @JsonProperty("sellUnitTitle")
    private String sellUnitTitle;

    @JsonProperty("preSellGoodsDTO")
    private PreSellGoodsDTODTO preSellGoodsDTO;

    @JsonProperty("sellUnitId")
    private Long sellUnitId;

    @JsonProperty("categoryList")
    private List<CategoryListDTO> categoryList;

    @JsonProperty("brandInfo")
    private BrandInfoDTO brandInfo;

    @JsonProperty("createVid")
    private Long createVid;

    @JsonProperty("goodsDesc")
    private String goodsDesc;

    @JsonProperty("performanceWay")
    private PerformanceWayDTO performanceWay;

    @JsonProperty("isCombine")
    private Boolean isCombine;

    @JsonProperty("sort")
    private Integer sort;

    @JsonProperty("outerGoodsCode")
    private String outerGoodsCode;

    @JsonProperty("defaultImageUrl")
    private String defaultImageUrl;

    @JsonProperty("saleChannelType")
    private Integer saleChannelType;

    @JsonProperty("goodsType")
    private Integer goodsType;

    @JsonProperty("goodsPropertyList")
    private List<GoodsPropertyListDTO> goodsPropertyList;

    @JsonProperty("innerPropertyList")
    private List<InnerPropertyListDTO> innerPropertyList;

    @JsonProperty("latestFulfillDate")
    private Integer latestFulfillDate;

    @JsonProperty("skuCycleSetting")
    private Integer skuCycleSetting;

    @JsonProperty("categoryPropertyList")
    private List<CategoryPropertyListDTO> categoryPropertyList;

    @JsonProperty("deductStockType")
    private Integer deductStockType;

    @JsonProperty("goodsImageUrl")
    private List<String> goodsImageUrl;

    @JsonProperty("goodsVideoUrl")
    private String goodsVideoUrl;

    @JsonProperty("specInfoList")
    private List<SpecInfoListDTO> specInfoList;

    @JsonProperty("limitInfo")
    private LimitInfoDTO limitInfo;

    @Data
    public static class PointDeductRuleDTO implements Serializable {

        @JsonProperty("openPointDeduct")
        private Integer openPointDeduct;

        @JsonProperty("useCondition")
        private Integer useCondition;

        @JsonProperty("deductAmount")
        private Integer deductAmount;

        @JsonProperty("deductionType")
        private Integer deductionType;

        @JsonProperty("useDiscount")
        private Double useDiscount;

        @JsonProperty("deductDiscount")
        private Double deductDiscount;
    }

    @Data
    public static class SizeTableInfoDTO implements Serializable {

        @JsonProperty("specId")
        private Integer specId;

        @JsonProperty("specName")
        private String specName;

        @JsonProperty("paramList")
        private List<ParamListDTO> paramList;

        @JsonProperty("sizeTableDetailList")
        private List<SizeTableDetailListDTO> sizeTableDetailList;

        @Data
        public static class ParamListDTO implements Serializable {

            @JsonProperty("isDefaultSelected")
            private Boolean isDefaultSelected;

            @JsonProperty("paramName")
            private String paramName;

            @JsonProperty("isSystemParam")
            private Boolean isSystemParam;

        }

        @Data
        public static class SizeTableDetailListDTO implements Serializable {

            @JsonProperty("paramValueList")
            private List<ParamValueListDTO> paramValueList;

            @JsonProperty("specValue")
            private String specValue;

            @JsonProperty("specValueId")
            private Integer specValueId;


            @Data
            public static class ParamValueListDTO implements Serializable {

                @JsonProperty("paramName")
                private String paramName;

                @JsonProperty("paramValue")
                private Double paramValue;
            }
        }
    }

    @Data
    public static class ItemClassifyDTO implements Serializable {

        @JsonProperty("classifyLevel")
        private Integer classifyLevel;

        @JsonProperty("itemClassifyId")
        private Integer itemClassifyId;

        @JsonProperty("parentClassify")
        private ParentClassifyDTO parentClassify;

        @JsonProperty("title")
        private String title;

        @Data
        public static class ParentClassifyDTO implements Serializable {

            @JsonProperty("classifyLevel")
            private Integer classifyLevel;

            @JsonProperty("itemClassifyId")
            private Integer itemClassifyId;

            @JsonProperty("title")
            private String title;

        }
    }

    @Data
    public static class TagInfoDTO implements Serializable {

        @JsonProperty("tagId")
        private Long tagId;

        @JsonProperty("name")
        private String name;
    }

    @Data
    public static class PreSellGoodsDTODTO implements Serializable {

        @JsonProperty("startPresellTime")
        private Long startPresellTime;

        @JsonProperty("presellTimeType")
        private Integer presellTimeType;

        @JsonProperty("deliveryInfo")
        private DeliveryInfoDTO deliveryInfo;

        @JsonProperty("finalPaymentInfo")
        private FinalPaymentInfoDTO finalPaymentInfo;

        @JsonProperty("selectWarehouseType")
        private Integer selectWarehouseType;

        @JsonProperty("title")
        private String title;

        @JsonProperty("warehouseName")
        private String warehouseName;

        @JsonProperty("expireProcessType")
        private Integer expireProcessType;

        @JsonProperty("ignoreChangeType")
        private Integer ignoreChangeType;

        @JsonProperty("goodsLimitRule")
        private Integer goodsLimitRule;

        @JsonProperty("depositPayType")
        private Integer depositPayType;

        @JsonProperty("warehouseId")
        private Integer warehouseId;

        @JsonProperty("endPresellTime")
        private Long endPresellTime;

        @JsonProperty("deposit")
        private Integer deposit;

        @Data
        public static class DeliveryInfoDTO implements Serializable {

            @JsonProperty("afterFinalPayDeliveryHour")
            private Integer afterFinalPayDeliveryHour;

            @JsonProperty("deliveryType")
            private Integer deliveryType;

            @JsonProperty("afterFinalPayDeliveryDay")
            private Integer afterFinalPayDeliveryDay;

            @JsonProperty("scheduleDeliveryTime")
            private Integer scheduleDeliveryTime;
        }

        @Data
        public static class FinalPaymentInfoDTO implements Serializable {

            @JsonProperty("finalPaymentType")
            private Integer finalPaymentType;

            @JsonProperty("afterDepositEndFinalDay")
            private Integer afterDepositEndFinalDay;

            @JsonProperty("startFinalPayTime")
            private Long startFinalPayTime;

            @JsonProperty("afterDepositEndFinalHour")
            private Integer afterDepositEndFinalHour;

            @JsonProperty("afterDepositStartFinalDay")
            private Integer afterDepositStartFinalDay;

            @JsonProperty("endFinalPayTime")
            private Long endFinalPayTime;
        }
    }

    @Data
    public static class BrandInfoDTO implements Serializable {

        @JsonProperty("log")
        private String log;

        @JsonProperty("brandId")
        private Long brandId;

        @JsonProperty("name")
        private String name;

        @JsonProperty("type")
        private Integer type;
    }

    @Data
    public static class PerformanceWayDTO implements Serializable {

        @JsonProperty("deliveryList")
        private List<DeliveryListDTO> deliveryList;

        @JsonProperty("mallCycleGoodsConfig")
        private MallCycleGoodsConfigDTO mallCycleGoodsConfig;

        @Data
        public static class MallCycleGoodsConfigDTO implements Serializable {

            @JsonProperty("fulfillCycleConfig")
            private FulfillCycleConfigDTO fulfillCycleConfig;

            @JsonProperty("closingTime")
            private Integer closingTime;

            @JsonProperty("alterAddress")
            private Integer alterAddress;

            @JsonProperty("closingTimeDetail")
            private String closingTimeDetail;

            @JsonProperty("fulfillCycleInt")
            private Integer fulfillCycleInt;

            @JsonProperty("delayFulfill")
            private Integer delayFulfill;

            @JsonProperty("delayCurrFulfill")
            private Integer delayCurrFulfill;

            @JsonProperty("delayDay")
            private Integer delayDay;

            @Data
            public static class FulfillCycleConfigDTO implements Serializable {

                @JsonProperty("removeWeekend")
                private Integer removeWeekend;

                @JsonProperty("cycleInterval")
                private Integer cycleInterval;

                @JsonProperty("cycleValues")
                private List<Integer> cycleValues;

                @JsonProperty("fulfillTimeOptions")
                private List<String> fulfillTimeOptions;

                @JsonProperty("cycleUnit")
                private Integer cycleUnit;

                @JsonProperty("cycleTimes")
                private Integer cycleTimes;
            }
        }

        @Data
        public static class DeliveryListDTO implements Serializable {

            @JsonProperty("deliveryId")
            private Long deliveryId;

            @JsonProperty("deliveryNodeShipId")
            private Long deliveryNodeShipId;

            @JsonProperty("deliveryType")
            private Integer deliveryType;

            @JsonProperty("templateId")
            private Long templateId;
        }
    }

    @Data
    public static class LimitInfoDTO implements Serializable {

        @JsonProperty("goodsLimitNum")
        private Integer goodsLimitNum;

        @JsonProperty("goodsLimitCycle")
        private Integer goodsLimitCycle;
    }

    @Data
    public static class SkuListDTO implements Serializable {

        @JsonProperty("marketPrice")
        private String marketPrice;

        @JsonProperty("salePrice")
        private String salePrice;

        @JsonProperty("costPrice")
        private String costPrice;

        @JsonProperty("outerSkuCode")
        private String outerSkuCode;

        @JsonProperty("weight")
        private String weight;

        @JsonProperty("skuBarCode")
        private String skuBarCode;

        @JsonProperty("cycleSkuList")
        private List<CycleSkuListDTO> cycleSkuList;

        @JsonProperty("skuSpecValueList")
        private List<SkuSpecValueListDTO> skuSpecValueList;

        @JsonProperty("volume")
        private String volume;

        @JsonProperty("skuPreStockNum")
        private Integer skuPreStockNum;

        @JsonProperty("skuStockNum")
        private Double skuStockNum;

        @JsonProperty("imageUrls")
        private List<String> imageUrls;

        @JsonProperty("isDisabled")
        private Boolean isDisabled;

        @JsonProperty("skuId")
        private Long skuId;

        @Data
        public static class CycleSkuListDTO implements Serializable {

            @JsonProperty("cycleStockNum")
            private Integer cycleStockNum;

            @JsonProperty("cycleNum")
            private Integer cycleNum;
            @JsonProperty("cycleMarkingPrice")
            private String cycleMarkingPrice;

            @JsonProperty("isValid")
            private Boolean isValid;
            @JsonProperty("bizId")
            private Long bizId;

            @JsonProperty("cyclePrice")
            private String cyclePrice;
            @JsonProperty("cycleName")
            private String cycleName;
        }

        @Data
        public static class SkuSpecValueListDTO implements Serializable {

            @JsonProperty("specId")
            private Long specId;

            @JsonProperty("specValueName")
            private String specValueName;
            @JsonProperty("specName")
            private String specName;

            @JsonProperty("specValueId")
            private Long specValueId;
        }
    }

    @Data
    public static class GoodsRightsListDTO implements Serializable {

        @JsonProperty("propValueId")
        private Long propValueId;

        @JsonProperty("propId")
        private Long propId;
        @JsonProperty("propName")
        private String propName;

        @JsonProperty("propValueName")
        private String propValueName;
    }

    @Data
    public static class GoodsClassifyListDTO implements Serializable {

        @JsonProperty("classifyLevel")
        private Integer classifyLevel;

        @JsonProperty("classifyId")
        private Long classifyId;

        @JsonProperty("name")
        private String name;

        @JsonProperty("parentId")
        private Long parentId;
    }

    @Data
    public static class CategoryListDTO implements Serializable {

        @JsonProperty("categoryType")
        private Integer categoryType;

        @JsonProperty("categoryLevel")
        private Integer categoryLevel;
        @JsonProperty("parentCategoryId")
        private Long parentCategoryId;

        @JsonProperty("categoryName")
        private String categoryName;
        @JsonProperty("categoryId")
        private Long categoryId;
    }

    @Data
    public static class GoodsPropertyListDTO implements Serializable {

        @JsonProperty("propValueId")
        private Long propValueId;

        @JsonProperty("propId")
        private Long propId;
        @JsonProperty("propName")
        private String propName;

        @JsonProperty("propValueName")
        private String propValueName;
    }

    @Data
    public static class InnerPropertyListDTO implements Serializable {

        @JsonProperty("propValueId")
        private Long propValueId;

        @JsonProperty("propId")
        private Long propId;

        @JsonProperty("propName")
        private String propName;

        @JsonProperty("propValueName")
        private String propValueName;
    }

    @Data
    public static class CategoryPropertyListDTO implements Serializable {

        @JsonProperty("propValueId")
        private Long propValueId;

        @JsonProperty("propId")
        private Long propId;
        @JsonProperty("propName")
        private String propName;

        @JsonProperty("propValueName")
        private String propValueName;
        @JsonProperty("categoryId")
        private Long categoryId;
    }

    @Data
    public static class SpecInfoListDTO implements Serializable {

        @JsonProperty("specId")
        private Long specId;

        @JsonProperty("specName")
        private String specName;
        @JsonProperty("isOpenSizeRecommend")
        private Boolean isOpenSizeRecommend;

        @JsonProperty("specImgEnable")
        private Boolean specImgEnable;
        @JsonProperty("skuSpecValueList")
        private List<SkuSpecValueListDTO> skuSpecValueList;

        @Data
        public static class SkuSpecValueListDTO implements Serializable {

            @JsonProperty("specValueName")
            private String specValueName;

            @JsonProperty("imageUrl")
            private String imageUrl;
            @JsonProperty("imageUrls")
            private List<String> imageUrls;

            @JsonProperty("specValueId")
            private Long specValueId;
            @JsonProperty("sort")
            private Integer sort;
        }
    }
}
